// es6继承 
// class Parent {
//     constructor() {
//         this.age = 18 
//     }
// }

// class Child  extends Parent{
//     constructor() {
//         super();
//         this.name = '张三'
//     }
// }
// let  o1 = new Child()
// console.log(o1.name,o1.age);


// 构造函数继承  原型链上的方法没有办法继承
//     function Parent() {
//         this.age = 18 
//     }

//     function Child() {
//         Parent.call(this);
//         this.name = '张三'
//     }
// let o3 = new Child();
// console.log(o3,o3.name,o3.age);



// 原型链继承
//     function Parent() {
//         this.age = 18 
//         this.sex = 'nans'
//     }

//     function Child() {
//         this.name = '张三'
//     }

//     Child.prototype = new Parent()
// let o2 = new Child();
// console.log(o2.sex);



// 组合式继承
// function Parent() {
//     this.age = 188
// }
// function Child() {
//     Parent.call(this);
//     this.name = '张三'
// }
// Child.prototype = new Parent()
// let o4 = new Child();
// console.log(o4, o4.name, o4.age);


// 总结：原型链继承：让子构造函数的实例指向父构造函数的实例 